// 给定由一些正数（代表长度）组成的数组 A，返回由其中三个长度组成的、面积不为零的三角形的最大周长。

// 如果不能形成任何面积不为零的三角形，返回 0。

//  

// 示例 1：

// 输入：[2,1,2]
// 输出：5
// 示例 2：

// 输入：[1,2,1]
// 输出：0
// 示例 3：

// 输入：[3,2,3,4]
// 输出：10
// 示例 4：

// 输入：[3,6,2,3]
// 输出：8
//  

// 提示：

// 3 <= A.length <= 10000
// 1 <= A[i] <= 10^6

#include <vector>
#include <algorithm>

using namespace std;

class Solution {
public:
    int largestPerimeter(vector<int>& A) {
        sort(A.begin(), A.end()); // 从小到大排序
        int res{0};
        int n{A.size()};
        // 从最大的三个开始找
        for (int i{n-1}; i > 1; --i) {
            if (isTriangle(A[i], A[i-1], A[i-2])) return A[i] + A[i-1] + A[i-2];
        }
        return 0;
    }
    // 三个数能否组成三角形
    bool isTriangle(int a, int b, int c) {
        if ((a+b <= c) || (a+c <= b) || (b+c <= a)) return false;
        return true;
    }
};
